Оператор [websocket]

картинка

Описание

Оператор [websocket] предназначен для передачи данных в интерфейс пользователя в режиме реального времени. При заданных условиях, на каждой итерации выполнения правила, [websocket] передаёт значения указанных логических узлов.

Пример использования

Пример правила состоит из 3-х узлов:

  • Узел N1_timeout — таймер обратного отсчёта (см. оператор [timeout])
  • Узел N2_switch — переключает слот GSM-модема на резервную SIM-карту
  • Узел N3_web_update — передаёт данные вычисленных узлов в веб-интерфейс
Узел "N1_timeout"                                               -- Создаём узел для загрузки в него временного интервала с обратным отсчётом.
-----------------
N1_timeout = {
    -- узел "N1_timeout" хранит количество секунд, уменьшаемое во времени.
    -- Для краткости - код не указан.
},
 
Узел "N2_switch"
----------------
N2_switch = {                                                   -- Создаём узел, выполняющий переключение на резервную сим-карту.
    {
        ["skip"] = function (nodes)                             -- При помощи оператора ["skip"] проверяем не истекло ли время задержки.
            local stil_wait = (nodes.timeout.value > 0)         -- Если счётчик обратного отсчёта, хранимый в узле "N1_timeout", всё ещё больше нуля,
            return stil_wait                                    -- то пропускаем выполнение следующих операторов (load-ubus, frozen).
        end
    },
    {
        ["load-ubus"] = function (nodes)                        -- При помощи оператора ["load-ubus"] отправляем на системную шину команду "switch" -
            return {                                            -- т.е. - переключение на резервный слот сим-карты.
                object = "tsmstm",
                method = "switch",
            }
        end
    },
    {
        ["frozen"] = function (nodes)                           -- При помощи оператора ["frozen"] "замораживаем" узел на 30 секунд,
            return 30                                           -- предотвращая обработку данного узла на следующих итерациях.
        end                                                     -- Это даёт прибору время, необходимое для завершения процедуры переключения слотов.
    },
},
 
Узел "N3_web_update"
--------------------                                                                    -- Создаём узел для отправки данных в веб-интерфейс.
N3_web_update = {                                                                      
    {                                                                                   -- Оператор ["websocket"] передаёт в веб-браузер значения
        ["websocket"] = function(nodes)                                                 -- вычисленных узлов в виде JSON:
            return({                                                                    -- {
                sim_id = "1",                                                           --      "sim_id":"1",
                timeout = nodes.timeout and nodes.N1_timeout.inited or "600",           --      "timeout": "180",
                wait_timer = nodes.timeout and tostring(nodes.N1_timeout.value),        --      "wait_timer": "179"
            })                                                                          -- }
        end
    },
}

Как это работает

Что делает Как
Передаёт данные в веб-интерфейс Через WebSocket
Формат передачи JSON
Частота обновления На каждой итерации выполнения правила
Содержимое Значения указанных логических узлов

В примере выше узел N3_web_update передаёт в браузер:

  • sim_id — идентификатор SIM-карты
  • timeout — начальное значение таймера
  • wait_timer — текущее значение обратного отсчёта